/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.treinamento.collections.list.arraylist;

import com.treinamento.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 *
 * @author felipe
 *
 * modificadores de acesso
 *
 */
public class NotaFiscal extends Auditoria {

    private static final double FATOR_IMPOSTO = 0.1098119;
    private String situacaoNota;
    private double valorImposto;
    private double valorTotal;
    private List<Item> itensNota;

    /*
     *  método responsável por instanciar o objeto NotaFiscal
     */
    public NotaFiscal() {
        itensNota = new ArrayList<Item>();
    }

    /*
     *  método responsável por iniciar a nota fiscal
     *  retornando um suposto número de nota e 
     *  colocando a situacao da nota como aberta
     */
    public int abrirNota() {
        Random random = new Random();
        situacaoNota = "A";
        return random.nextInt();
    }

    /*
     *  método responsável por encerrar a nota
     *  apurando o imposto e alterando o status para fechada
     */
    public void fecharNota() {
        apurarImposto();
        situacaoNota = "F";
    }

    /*
     *  método responsável por apurar o imposto da nota
     *  o imposto da nota é apurado em cima do valor total de todos 
     *  os itens, que é multiplicado por um fator
     */
    private void apurarImposto() {
        for (Item item : itensNota) {
            valorImposto += item.getValor();
        }
        valorImposto = valorImposto * FATOR_IMPOSTO;
    }

    /*
     *  método responsável por adicionar novos itens a nota
     *  somente se ela estiver aberta, os itens serão adicionados
     *  no próximo elemento que estiver livre
     */
    public void adicionarItens(Item item) {
        if (situacaoNota.equals("A")) {
            itensNota.add(item);
        }
    }
    
    public void removerItem(int indice){
        if(!situacaoNota.equals("F")){
            itensNota.remove(indice);
        }
    }
    
    public void limparNota(){
        if(!situacaoNota.equals("F")){
            itensNota.clear();
        }
    }

    /*
     * utiliza um dos métodos de conveniência de List
     * para recuperara aquantidade de itens da nota
     */
    public int quantidadeItens() {
        return itensNota.size();
    }

    public String getSituacaoNota() {
        return situacaoNota;
    }

    public void setSituacaoNota(String situacaoNota) {
        this.situacaoNota = situacaoNota;
    }

    public List<Item> getItensNota() {
        return itensNota;
    }

    public void setItensNota(List<Item> itensNota) {
        this.itensNota = itensNota;
    }

    public double getValorImposto() {
        return valorImposto;
    }

    public void setValorImposto(double valorImposto) {
        this.valorImposto = valorImposto;
    }

    public double getValorTotal() {
        return valorTotal;
    }

    public void setValorTotal(double valorTotal) {
        this.valorTotal = valorTotal;
    }
}
